靶场环境搭建

环境环境搭建服务器软件是phpstudy下载地址https://www.xp.cn/
靶场是sqli-labs下载地址是https://github.com/Audi-1/sqli-labs
配置sqli-labs的sql密码
在这里插入图片描述

用php5和mysql5.7
在这里插入图片描述

成功
在1这里插入图片描述

注入的常用的函数

select system_user(); 系统用户名

select user();   当前数据库用户名

select current_user();   当前用户名

select session_user(); 连接数据库的用户名

select version(); 数据库版本

select @@datadir; 数据库路径

select @@basedir; 数据库安装路径

select version() mysql;   数据库版本

select @@global.version_compile_os; 操作系统的信息

select @@version_compile_os; 操作系统的信息

select database(); 返回当前使用的数据库

在这里插入图片描述

count() 返回运行结果的数量

image-20211228174318004

concat() 叫我们的内容进行连接起来

可以看见下面的结果叫我们的abc和def进行了连接

image-20211228174722963

我们在注入查询到时候通常会下面这样做,结果会输入到一起

image-20211228175023543

concat_ws() 叫我们的内容进行连接起来

可以看见上面concat()中间连接没有缝隙的concat_ws()是可以添加分隔符的

image-20211228175353626

group_concat() 叫结果输入成一行

image-20211228175636534

load_file() 读取本地文件

image-20211228180624830

into outfile 写文件

image-20211228181201769

select ascii() ; 返回字符的ASCII值

image-20211228181658892

select char() ; #他和ascii()是相反的,数字对应字符

image-20220106104117285

select ord(); 返回第一个字符的ASCII值

image-20211228181841904

select mid(‘字符串’,从哪,到哪); 指定返回字符串的,类似切片

image-20211228182452380

select substr(‘字符串’,从哪,到哪); 和上面的一样

select length() 返回字符串的长度

image-20211228182734436

select left() 指定返回从左边开始长度,类似切片

image-20211228183041604

select floor() 返回整数,这个不四十五路

image-20211228183254512

select rand() 生成0到1随机数

image-20211228183527014

extractvlue()

updatexml()

select sleep() # 设置语句执行暂停几秒

select if(1>2,2,3); # 真就返回第二个参数假就返回第三个参数

结果=3

select strcmp(); # 比较字符串的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

MySQL [dvwa]> select strcmp('a','b');
+-----------------+
| strcmp('a','b') |
+-----------------+
| -1 |
+-----------------+
1 row in set (0.001 sec)

MySQL [dvwa]> select strcmp('b','a');
+-----------------+
| strcmp('b','a') |
+-----------------+
| 1 |
+-----------------+
1 row in set (0.001 sec)

MySQL [dvwa]> select strcmp('a','a');
+-----------------+
| strcmp('a','a') |
+-----------------+
| 0 |
+-----------------+
1 row in set (0.001 sec)

MySQL [dvwa]>

select ifnull(参数1,参数2); # 如果参数1不是null就返回参数1,如果参数1是null就返回参数2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
MySQL [dvwa]> select ifnull(4,6);
+-------------+
| ifnull(4,6) |
+-------------+
| 4 |
+-------------+
1 row in set (0.001 sec)

MySQL [dvwa]> select ifnull(null,6); # 这个是null就返回6
+----------------+
| ifnull(null,6) |
+----------------+
| 6 |
+----------------+
1 row in set (0.001 sec)

MySQL [dvwa]> select ifnull(0,6);
+-------------+
| ifnull(0,6) |
+-------------+
| 0 |
+-------------+
1 row in set (0.000 sec)

select exp(参数); # 返回参数的几次方

mysql的运算符

寻找注入点

无特定目标

1
inurl:php?id=

在这里插入图片描述
有特定目标

1
inurl:php?id=site:xxxx.com

在这里插入图片描述

检查注入点

  1. 手工简单识别
1
2
3
and 1=1/ and 1=2
and"1=1/and"1=2
and 1 like 1/and 1 like 2
  1. 工具识别
1
2
sqlmap -m   要指定的文件     多个目标URL保持到文件里-m就会用文件里的
sqlmap --craw sqlmap对目标网站进行爬取然后依次进行测试

mysql手动注入

  1. mysql结构
    mysql内库
    在这里插入图片描述
  2. 核心原理:
    MySq内置的 Information schema库,它功能强大,是我们进行MySq注入的基石!
    通过 information schema我们可以窥透整个 MySQL的运行情况,也可以查看到数据库中所有的数据信息。
  1. 查询数据库核心语法
功能名称 查询语句
查库 select schema_name from information_schema.schemata
查表 select table_name from information_schema.tables where table_schema=’库名’
查列 select column_name from information_schema.columns where table_name=’列名’;
查数据 select 列名 from 库名.表名

演示

1.查库
在这里插入图片描述
2.查表
在这里插入图片描述
3.查列
在这里插入图片描述
可以不输入单引号
比如'users'列名转换成哈希7573657273
步骤
在这里插入图片描述
在这里插入图片描述
然后在语句里面输入0x和上面生成出来的哈希
意思
0x是告诉我是16进行的
在这里插入图片描述

  1. 提示

提示1:
所有类型的sql注入,都是基于査库、表、列语句

提示2:
sql注入,都是基于査库、表、列语句
査询的场緊:可利用limit限定返回的数置及位置,依次査询
回显数据的场聚:concat链接多个数据成为一条返回结果

  1. limit函数
    上面的这个limit,下面是他的演示,就是叫修改就可以查看其他的行
    在这里插入图片描述
  2. group_concat()函数
    他可以叫多个列组合到一个里面,应为sql注入,可能输出的有限制,
    找个函数就是,叫内容都输出的一个里面

在这里插入图片描述

提示3:.
在一些场景,想要快速获取数据,需要接住工具,如:burp

靶场是sqli-labs进行手动sql注入1-4到这个地方:Sqli-labs Less1-4关卡